package com.meilingcloud.biobank.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.meilingcloud.biobank.domain.Container;
import com.meilingcloud.biobank.domain.dto.ContainerBatchDto;
import com.meilingcloud.biobank.domain.vo.StatisticVo;

import java.util.List;

/**
 * 容器 Service接口
 *
 * @author chenl
 * @date 2021-01-25
 */
public interface IContainerService extends IService<Container> {

    /**
     * 查询列表
     */
    List<Container> queryList(Container container);

    /**
     * 懒加载容器树
     */
    List<Container> lazyTree(Long parentId);

    /**
     * 根据子节点id查询所有父节点(包括子节点)
     */
    List<Container> getAllParentsByChild(Long containerId);

    /**
     * 新增盒子类型时同步更新父容器存储数量
     */
    boolean saveContainer(Container container);

    /**
     * 批量添加容器
     */
    boolean batchAddition(ContainerBatchDto dto);

    /**
     * 更新盒子类型时同步更新父容器存储数量
     */
    boolean updateContainer(Container container);

    /**
     * 批量更新 - 供更新当前存储数量使用
     */
    boolean updateContainerBatch(List<Container> containers);

    /**
     * 检查容器中是否有样本，如果有样本不允许删除，需要取走样本或转移样本后才可删除
     * 如果删除的是盒子类型时同步更新父容器存储数量
     */
    boolean removeContainer(Long containerId);

    /**
     * 容器统计
     */
    List<StatisticVo> statisticContainer();

    /**
     * 根据父节点id查询所有叶子节点
     */
    List<Container> getLeafByParent(Long containerId);

    /**
     * 复制容器
     */
    boolean copyContainer(Container container);

    /**
     * 计算当前容器存储样本数
     */
    boolean calculateSampleCount();

    /**
     * 获取容器详情
     */
    Container getContainerById(Long containerId);

}
